
/**
 * @brief
 *
 * @version  0.1
 * @author   wuxingchuang
 * @date     2025.04.11
 *          _
 *      ___| |__   ___ _ __   __ _  ___  _ __   __ _
 *     / __| '_ \ / _ \ '_ \ / _` |/ _ \| '_ \ / _` |
 *     \__ \ | | |  __/ | | | (_| | (_) | | | | (_| |
 *     |___/_| |_|\___|_| |_|\__, |\___/|_| |_|\__, |
 *                           |___/             |___/
 * @copyright (c) 2024 by 神工仿真, All Rights Reserved.
 */
#pragma once
#include "DataStructure/Common/Id.h"
#include "DataStructure/Common/Real.h"
#include "DataStructure/Input/Design/DesignBase.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN

struct DVLREL2Data : public DesignBase {
  struct DVIDSData {
    SG::DataStructure::Common::Id m_DVID = 0;  ///< DESVAR identification number
  };
  struct LABLSData {
    char m_LABL[8] = {
        0};  ///< Label of a constant on the DTABLE or DTABLE2 entry
  };

  char m_TYPE[8] = {0};                     ///< Name of a load
  SG::DataStructure::Common::Id m_SID = 0;  ///< Load set identification number
  char m_LNAME[8] = {0};                    ///< Load name
  SG::DataStructure::Common::Real m_LMIN = 0.0;  ///< Minimum value of the load
  SG::DataStructure::Common::Real m_LMAX = 0.0;  ///< Maximum value of the load
  SG::DataStructure::Common::Id m_EQID =
      0;  ///< DEQATN entry identification number
  SG::DataStructure::Common::I64 m_ATT1 =
      0;  ///< Attribute of the designed load set
  SG::DataStructure::Common::I64 m_ATT2 =
      0;  ///< Attribute of the designed load set
  SG::DataStructure::Common::I64 m_ATT3 =
      0;  ///< Attribute of the designed load set
  SG::DataStructure::Common::I64 m_ATT4 =
      0;  ///< Attribute of the designed load set
  SG::DataStructure::Common::I64 m_ATT5 =
      0;  ///< Attribute of the designed load set
  SG::DataStructure::Common::Id m_domainId = 0;  ///<

  std::vector<DVIDSData> m_DVIDSList;
  std::vector<LABLSData> m_LABLSList;
};

///@{ @brief operator override
DECLSPEC bool operator==(const DVLREL2Data::DVIDSData& val1,
                         const DVLREL2Data::DVIDSData& val2);
DECLSPEC bool operator==(const DVLREL2Data::LABLSData& val1,
                         const DVLREL2Data::LABLSData& val2);

DECLSPEC bool operator==(const DVLREL2Data& val1, const DVLREL2Data& val2);
///}@
SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE
